package main

import (
	"calc/parser" // 导入生成的解析器
	"fmt"
	"github.com/antlr4-go/antlr/v4"
	"os"
)

// 自定义监听器
type CalcListener struct {
	*parser.BaseCalcListener
	stack []int
}

func (l *CalcListener) push(i int) {
	l.stack = append(l.stack, i)
}

func calc(input string) int {
	// 设置输入流
	is := antlr.NewInputStream(input)

	// 创建词法分析器
	lexer := parser.NewCalcLexer(is)
	stream := antlr.NewCommonTokenStream(lexer, antlr.TokenDefaultChannel)

	// 创建语法分析器
	p := parser.NewCalcParser(stream)

	// 添加错误监听器
	p.RemoveErrorListeners()
	p.AddErrorListener(antlr.NewDiagnosticErrorListener(true))

	// 开始解析
	listener := &CalcListener{}
	antlr.ParseTreeWalkerDefault.Walk(listener, p.Prog())

	return 0
}

func main() {
	if len(os.Args) < 2 {
		fmt.Println("Usage: calc '1+2*3'")
		return
	}
	input := os.Args[1]
	fmt.Printf("%s = %d\n", input, calc(input))
}
